@echo off
setlocal enabledelayedexpansion

REM 设置编译器
set COMPILER=g++

REM 设置源代码和头文件目录
@REM set SRC_DIR=src
@REM set INCLUDE_DIR=head
@REM 在 cmd 中,可以不使用双引号来表示字符串,但是最好还是使用双引号,同时在 cmd 中可以使用 / 或者 \ 作为路径分隔符.
@REM / 和 \ 都可以作为路径分隔符,但是建议使用 /
set SRC_DIR=".\src"
set INCLUDE_DIR=".\head"

REM 设置输出文件名
@REM set OUTPUT_DLL=MyLibrary.dll
@REM set OUTPUT_LIB=MyLibrary.lib
set OUTPUT_DLL=".\MyLibrary.dll"
set OUTPUT_LIB=".\MyLibrary.lib"

REM 设置编译选项
set CXXFLAGS_DLL=-Wall -Wextra -std=c++11 -shared -finput-charset=UTF-8 -fexec-charset=GBK

REM 输出变量的值以进行调试
echo Compiler: %COMPILER%
echo Source directory: %SRC_DIR%
echo Include directory: %INCLUDE_DIR%
echo DLL output file: %OUTPUT_DLL%
echo Library output file: %OUTPUT_LIB%
echo Compiler flags for DLL: %CXXFLAGS_DLL%

REM 查找所有的源文件（排除 Main.cpp）
set SOURCES_DLL=
for %%f in (%SRC_DIR%\*.cpp) do (
    set SOURCES_DLL=!SOURCES_DLL! %%f
)

REM 输出找到的源文件列表
echo DLL source files: %SOURCES_DLL%

REM 编译 DLL 和生成 .lib 文件
%COMPILER% %CXXFLAGS_DLL% -I %INCLUDE_DIR% %SOURCES_DLL% -o %OUTPUT_DLL% -Wl,--out-implib,%OUTPUT_LIB%

REM 检查编译是否成功
if %errorlevel% neq 0 (
    echo DLL Compilation failed!
    pause
    exit /b
)

echo DLL and LIB files have been generated successfully.

pause
